#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""用于Python 3.13环境的KittenTTS服务启动器
这个脚本会检查环境并确保使用openai-whisper替代speech_recognition
"""

import os
import sys
import subprocess
import time

# 设置工作目录
sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__))))

def check_environment():
    """检查Python环境和关键依赖"""
    print("==== 环境检查 ====")
    
    # 检查Python版本
    python_version = sys.version_info
    print(f"Python版本: {python_version.major}.{python_version.minor}.{python_version.micro}")
    
    if python_version.major >= 3 and python_version.minor >= 13:
        print("检测到Python 3.13+环境，将使用openai-whisper替代speech_recognition")
    else:
        print("Python版本低于3.13，但仍然可以使用openai-whisper")
    
    # 检查关键依赖
    try:
        import whisper
        print("✓ openai-whisper 已安装")
        
        # 检查是否存在speech_recognition（如果存在可能会导致问题）
        try:
            import speech_recognition
            print("⚠️ 注意：检测到speech_recognition库已安装，在Python 3.13环境下可能会导致兼容性问题")
            print("建议运行fix_speech_recognition_error.bat脚本移除不兼容的依赖")
        except ImportError:
            print("✓ speech_recognition 未安装（这是Python 3.13环境下的理想状态）")
        
    except ImportError:
        print("✗ openai-whisper 未安装，需要安装依赖")
        
    print("==================")

def install_compatible_dependencies():
    """安装Python 3.13兼容的依赖"""
    print("正在安装Python 3.13兼容的依赖...")
    
    # 使用requirements_whisper_py313.txt文件安装依赖
    requirements_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'requirements_whisper_py313.txt')
    
    try:
        # 确保pip是最新版本
        print("正在更新pip...")
        subprocess.check_call([
            sys.executable, '-m', 'pip', 'install', '--upgrade', 'pip', 
            '-i', 'https://pypi.tuna.tsinghua.edu.cn/simple'
        ])
        
        # 安装依赖
        print(f"正在安装依赖 (使用{requirements_path})...")
        install_cmd = [
            sys.executable, '-m', 'pip', 'install', '-r', requirements_path, 
            '-i', 'https://pypi.tuna.tsinghua.edu.cn/simple',
            '--force-reinstall'
        ]
        
        # 打印命令以便用户了解
        print(f"执行命令: {' '.join(install_cmd)}")
        subprocess.check_call(install_cmd)
        
        print("依赖安装成功！")
        return True
    except subprocess.CalledProcessError as e:
        print(f"依赖安装失败: {e}")
        print("请尝试运行fix_speech_recognition_error.bat脚本解决问题")
        return False

def start_server():
    """启动FastAPI服务"""
    print("开始启动服务...")
    
    # 确保使用正确的工作目录
    os.chdir(os.path.dirname(os.path.abspath(__file__)))
    
    # 启动uvicorn服务
    try:
        print(f"正在启动服务，使用文件: main_whisper.py")
        print("服务将在 http://0.0.0.0:8000 启动")
        print("API文档可在 http://0.0.0.0:8000/docs 查看")
        print("按 Ctrl+C 停止服务")
        
        # 使用subprocess启动服务，这样用户可以看到输出
        subprocess.run([sys.executable, '-m', 'uvicorn', 'main_whisper:app', '--host', '0.0.0.0', '--port', '8000'])
    except KeyboardInterrupt:
        print("服务已停止")
    except Exception as e:
        print(f"服务启动失败: {e}")
        print("请尝试手动启动服务：uvicorn main_whisper:app --host 0.0.0.0 --port 8000")

def main():
    """主程序入口"""
    print("==== Kitten TTS 服务启动器 (Python 3.13兼容版) ====")
    
    # 检查环境
    check_environment()
    
    # 询问用户是否需要安装依赖
    install_deps = input("\n是否需要安装/更新依赖？(y/n): ").lower()
    
    if install_deps == 'y':
        if not install_compatible_dependencies():
            print("依赖安装失败，无法启动服务")
            input("按Enter键退出...")
            return
    
    # 短暂延迟，确保依赖安装完成
    time.sleep(1)
    
    # 启动服务
    start_server()

if __name__ == "__main__":
    main()